package com.hqyj.server.controller;

import cn.dev33.satoken.stp.SaTokenInfo;
import cn.dev33.satoken.stp.StpUtil;
import com.hqyj.server.entity.Users;
import com.hqyj.server.json.R;
import com.hqyj.server.service.UsersService;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;

@RestController
@RequestMapping("users")
public class UsersController {

    @Resource
    private UsersService usersService;

    //注册接口
    @PostMapping("/")
    public R register(@RequestBody Users u) {
        try {
            if (usersService.reg(u)) {
                return R.success("恭喜您注册成功！");
            }
            return R.fail("注册失败！");
        } catch (Exception ex) {
            ex.printStackTrace();
            return R.error("程序出现异常！");
        }
    }

    //登录接口
    @GetMapping("/auth")
    public R login(@RequestParam("identify") String identify, @RequestParam("password") String password) {
        try {

            Users loginSuccessUser = usersService.login(identify, password);
            if (loginSuccessUser != null) {

                //进入这里说明登录成功了。使用satoken保存用户的登录状态。
                //你办了张会员卡。
                StpUtil.login(loginSuccessUser.getUid());
                /*
                SaTokenInfo satoken = StpUtil.getTokenInfo();
                loginSuccessUser.setTokenName(satoken.getTokenName());
                loginSuccessUser.setTokenValue(satoken.getTokenValue());
                */
                loginSuccessUser.setPassword("");

                return R.success("登录成功！", loginSuccessUser);
            }
            return R.fail("登录失败，请检查用户名或者密码是否正确！");
        } catch (Exception ex) {
            ex.printStackTrace();
            return R.error("程序出现异常！");
        }
    }

    //判断账号是否已经注册的接口
    @GetMapping("/checkIsReg")
    public R checkIsReg(@RequestParam String identify) {
        try {
            boolean flag = usersService.checkIsReg(identify);
            return R.success("查询用户注册信息成功！", flag);
        } catch (Exception ex) {
            ex.printStackTrace();
            return R.error("程序出现异常！");
        }
    }

    //判断是否已经登录的接口
    @GetMapping("isLogin")
    public R isLogin(){
        try{
            boolean flag = StpUtil.isLogin();
            if(flag){
                String uid = (String) StpUtil.getLoginId();
                Users loginSuccessUser = usersService.getById(Integer.parseInt(uid));
                loginSuccessUser.setPassword("");

                return R.success("已登录!",loginSuccessUser);
                //return R.success("已登录！");
            }
            return R.fail("未登录！");
        }catch (Exception ex){
            ex.printStackTrace();
            return R.error("程序出现异常！");
        }
    }

    @GetMapping("/logout")
    public R logout(){
        try{

            StpUtil.logout();
            return R.success("注销成功！");
        }catch (Exception ex){
            ex.printStackTrace();
            return R.error("程序出现异常！");
        }
    }

    //更新用户资料的方法
    @PutMapping("/")
    public R updateUser(@RequestBody  Users u){
        try{
            if(usersService.updateUser(u)){
                return R.success("更新用户资料成功！");
            }
            return R.fail("更新用户资料失败！");
        }catch (Exception ex){
            ex.printStackTrace();
            return R.error("程序出现异常！");
        }
    }
}
